home *** CD-ROM | disk | FTP | other *** search
- Unit Sprites;
-
- { Version 1.0 }
-
- Interface
-
- Var MinX,MaxX:Integer;
- MinY,MaxY:Integer;
-
- Procedure GetImage(x1,y1,x2,y2:Word;Var Img:Pointer;Where:Word);
- Procedure KillImage(Var Img:Pointer);
- Procedure PutImage(X,Y:Word;Var Img:Pointer;Where:Word);
- Procedure PutImage_C(X,Y:Integer;Var Img:Pointer;Where:Word);
- Procedure SaveImage(Var F:File;Img:Pointer);
- Procedure LoadImage(Var F:File;Var Img:Pointer);
-
- Implementation
-
- Uses Mode13h;
-
- Procedure GetImage(x1,y1,x2,y2:Word;Var Img:Pointer;Where:Word);
- Var Dx,Dy:Word;
- A,B:Word;
- Segm,Offs:Word;
- Begin
- Dx:=Abs(x2-x1)+1;
- Dy:=Abs(y2-y1)+1;
- GetMem(Img,Dx*Dy+4);
- Segm:=Seg(Img^);
- Offs:=Ofs(Img^);
- Move(Dx,Mem[Segm:Offs],2);
- Move(Dy,Mem[Segm:Offs+2],2);
- Offs:=Offs+4;
- For A:=y1 to y2 Do
- For B:=x1 to x2 Do
- Begin
- Mem[Segm:Offs]:=GetPixel(B,A,Where);
- Inc(Offs);
- End;
- End;
-
- Procedure KillImage(Var Img:Pointer);
- Var Dx,Dy:Word;
- Segm,Offs:Word;
- Begin
- Segm:=Seg(Img^);
- Offs:=Ofs(Img^);
- Move(Mem[Segm:Offs],Dx,2);
- Move(Mem[Segm:Offs+2],Dy,2);
- FreeMem(Img,Dx*Dy+4);
- End;
-
- Procedure PutImage(X,Y:Word;Var Img:Pointer;Where:Word);
- Var Dx,Dy:Word;
- A,B:Word;
- Segm,Offs:Word;
- Begin
- Segm:=Seg(Img^);
- Offs:=Ofs(Img^);
- Move(Mem[Segm:Offs],Dx,2);
- Move(Mem[Segm:Offs+2],Dy,2);
- Offs:=Offs+4;
- For A:=Y To Y+Dy-1 Do
- Begin
- Move(Mem[Segm:Offs],Mem[Where:A*320+X],Dx);
- Offs:=Offs+Dx;
- End;
- End;
-
- Procedure PutImage_C(X,Y:Integer;Var Img:Pointer;Where:Word);
- Var Dx,Dy:Word;
- A,B:Word;
- Segm,Offs:Word;
- Begin
- Segm:=Seg(Img^);
- Offs:=Ofs(Img^);
- Move(Mem[Segm:Offs],Dx,2);
- Move(Mem[Segm:Offs+2],Dy,2);
- Offs:=Offs+4;
- A:=Y;
- While (A<=Y+DY-1) And (A<MaxY) Do
- Begin
- B:=X;
- While (B<=X+DX-1) And (B<MaxX) Do
- Begin
- If (X>=MinX) And (Y>=MinY) Then
- PutPixel(B,A,Mem[Segm:Offs],Where);
- Inc(Offs);
- Inc(B);
- End;
- Inc(A);
- End;
- End;
-
- Procedure SaveImage(Var F:File;Img:Pointer);
- Var Dx,Dy:Word;
- Segm,Offs:Word;
- Begin
- Segm:=Seg(Img^);
- Offs:=Ofs(Img^);
- Move(Mem[Segm:Offs],Dx,2);
- Move(Mem[Segm:Offs+2],Dy,2);
- BlockWrite(F,Img^,Dx*Dy+4);
- End;
-
- Procedure LoadImage(Var F:File;Var Img:Pointer);
- Var Dx,Dy:Word;
- Segm,Offs:Word;
- Begin
- BlockRead(F,Dx,2);
- BlockRead(F,Dy,2);
- GetMem(Img,Dx*Dy+4);
- Segm:=Seg(Img^);
- Offs:=Ofs(Img^);
- Move(Dx,Mem[Segm:Offs],2);
- Move(Dy,Mem[Segm:Offs+2],2);
- Offs:=Offs+4;
- BlockRead(F,Mem[Segm:Offs],Dx*Dy);
- End;
-
- Begin
- MinX:=0;
- MaxX:=319;
- MinY:=0;
- MaxY:=199;
- End.
-